
/*
1、测试fcntl复制文件描述符的功能
2、测试fcntl获取设置文件状态标志到功能
*/

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int fd1,fd2;
    int ret;
    int flag;

    /*打开文件test_file*/
    fd1 = open("./test_file",O_RDONLY);
    if(-1 == fd1)
    {
        perror("open error");
        exit(-1);
    }

    /*使用fcntl复制一个文件描述符*/
    fd2 = fcntl(fd1,F_DUPFD,0);
    if(-1 == fd2)
    {
        perror("fcntl error");
        ret = -1;
        goto err;
    }

    printf("fd1:%d\nfd2:%d\n",fd1,fd2);

    /*获取文件状态标志*/
    flag = fcntl(fd1,F_GETFL);
    if(-1 == flag)
    {
        perror("fcntl F_GETFL error");
        ret = -1;
        goto err;
    }

    printf("flags:0x%x\n",flag);

    /*设置文件状态标志，添加O_APPEND*/
    ret = fcntl(fd1,F_SETFL,flag|O_APPEND);
    if(-1 == ret)
    {
        perror("fcntl F_SETFL error");
        goto err;
    }
    printf("ret:0x%x\n",ret);


    ret = 0;
    close(fd2);

    err:
        /*关闭文件*/
        close(fd1);
        exit(ret);

}